package leetcode;

import java.util.ArrayList;
import java.util.List;

/**
 * @param
 * @author oyz
 * @version 1.0.4
 * @description: 删除链表倒数第n个节点，并且返回头节点
 * @date 2022/9/11 23:10
 */
public class Code021 extends ListNode {

    public ListNode removeNthFromEnd(ListNode head, int n) {
        // todo 定义一个哑节点，避免删除的是否是头节点而找不到他的上一个节点
        ListNode node = new ListNode(0,head);
        // 定义一个当前节点
        ListNode current = node;
        // 查找数组长度
        int length = getLength(head);
        // 找到删除节点的前一个节点
        for (int i = 1; i < length -n+1; i++) {
            current = current.next;
        }
        // 连接指针
        current.next = current.next.next;
        // 哑节点指向头节点
        ListNode headNode = node.next;
        return headNode;
    }
    int getLength(ListNode head) {
        int length = 0;
        while(head!=null ){
            length++;
            head = head.next;
        }
        return length;
    }

}
